package api.event
{
	import flash.events.Event;
	/**
	 * 自定义事件类
	 * 此类参考PureMVC模式, Notification通知类的定义，增加主体和类型属性
	 * 事件名、主体、类型，做为传递事件参数，对侦听方是区分处理事件的作用
	 * 
	 * ★★★★★★★★★★★★★★★ 重要 ★★★★★★★★★★★★★★★
	 * 
	 * 1.事件第2个(bubbles)参数，设置是否冒泡，默认不冒泡
	 *   true： 事件流阶段为_捕获、目标、冒泡  
	 *   false：事件流阶段为_捕获、目标
	 *   
	 * 2.事件侦听第3个(useCapture)参数，设置侦听的阶段，默认目标和冒泡阶段
	 *   true： 侦听事件流阶段为_捕获
	 *   false：侦听事件流阶段为_目标、冒泡
	 * 
	 * 3.target：事件发生目标，currentTarget：侦听事件的当前目标
	 * 
	 * 总结：自定义事件如按默认设置，就是谁侦听，就向谁发送
	 * 
	 * ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
	 **/ 
	public class CustomEvent extends Event
	{
		//事件名
		public var name:String;
		//主体
		public var data:Object;
		//类型
		private var _type:String;
		
		/**
		 * 构造函数
		 * @param 事件名
		 * @param 主体(对象)
		 * @param 类型
		 * @param 冒泡
		 * @param 取消默认行为
		 */ 
		private var _data:*
		public function CustomEvent(name:String, data:Object=null, type:String=null, bubbles:Boolean=false, cancelable:Boolean=false)
		{
			super(name, bubbles, cancelable);
			this.name = name;
			this.data = data;
			_type = type;
		}

		/**
		 * 重写取得类型
		 * @return 字符串
		 **/ 
		override public function get type():String
		{
			return _type;//类型
		}
		
		/**
		 * 重写对象值的字符串表现形式
		 * @return 字符串
		 **/ 
		override public function toString():String
		{
			//类名            事件名  主体    类型    冒泡        取消默认行为   事件流阶段      事件发生目标  侦听事件的当前目标
			return formatToString("CustomEvent","name","body","type","bubbles","cancelable","eventPhase","target",   "currentTarget");
		}
		
		/**
		 * 重写复制实例
		 * @return 事件
		 **/  
		override public function clone():Event
		{
			var event:CustomEvent = new CustomEvent(name,data,type);
			return event;
		}
		
	

	}
}